import { message } from "antd";

// 固定不变的后端接口协议和域名端口号前置路经等，提取出来。
const ORIGIN = `http://127.0.0.1:3000/mock/113`;

// 提取统一的请求头,跟后端设置的CORS策略要统一。
const HEADERS = {
  "Content-Type": "application/json",
};

/**
 * 封装get方法，用作get请求
 * @param {*} url  必传，接口路径 '/xxx/xxx'
 * @param {*} params 可选参数，指要拼接的参数
 * @returns  处理后fetch请求结果
 * 使用方式-例: get('/api/getUserInfo', {id: 'xxxxxx'})
 */
export const get = (url, params) => {
  let query = "";
  if (params) {
    for (let i in params) {
      query = query ? query + `?` : query + "&";
      query += `${i}=${params[i]}`;
    }
  }
  // 拼接参数生成最终请求的url
  const input = ORIGIN + url + params;
  return fetch(input, {
    headers: HEADERS,
  })
    .then((res) => res.json())
    .then((res) => {
      // 统一处理兜底，如果接口请求失败，提示失败原因
      const { success, msg, code } = res || {};
      if (!success) {
        if(code === 401){
          // 如果未登陆
          message.error(msg || "请先登陆!");
          const callbackPath = window.location.href.replace(window.location.origin, "");
          const loginPath = window.location.origin + '/login?callback=' + callbackPath;
          window.location.href = loginPath;
          return ;
        }
        message.error(msg || "接口访问失败!");
        return null;
      }
      return res;
    })
    .catch((error) => message.error(error.message || "网络请求错误!"));
};


/**
 * 封装post方法，用作post请求
 * @param {*} url 必传，接口路径 '/xxx/xxx'
 * @param {*} params  可选参数，指要拼接的参数
 * @returns  处理后fetch请求结果
 * 使用方式-例: post('/api/getUserInfo', {name: '小明'})
 */

export const post = (url, params) => {
  return fetch(ORIGIN + url, {
    method: "POST",
    headers: HEADERS,
    body: JSON.stringify(params || {}),
  })
    .then((res) => res.json())
    .then((res) => {
      // 统一处理兜底，如果接口请求失败，提示失败原因
      const { success, msg, code } = res || {};
      if (!success) {
        if(code === 401){
          // 如果未登陆
          message.error(msg || "请先登陆!");
          // 获取当前的pathname
          const callbackPath = window.location.href.replace(window.location.origin, "");
          // 拼接一下，登陆后再跳回来。
          const loginPath = window.location.origin + '/login?callback=' + callbackPath;
          // 手动跳转到登陆页，并且刷新页面
          window.location.href = loginPath;
          return ;
        }
        message.error(msg || "接口访问失败!");
        return null;
      }
      return res;
    })
    .catch((error) => message.error(error.message || "网络请求错误!"));
};
